﻿/*******************************************************************************
* file  : sha256 demo
* creat : apleilx
* data  : 2017/03/02
* @brief  用于生成数据流摘要，验证数据流完整性，结果为32字节
*			功能同MD5,安全性更高，但运算速度低于MD5
*******************************************************************************/
#include "common.h"
#include "crc_ext.h"
#include "mbedtls/sha256.h"

/*******************************************************************************
* @brief  sha256_demo.
* \param[in] none
* \retval: none
*******************************************************************************/
void sha256_demo(void)
{
	void * src , *out;
	mbedtls_sha256_context *sha256;
	
	dbg_print("\nmbed SHA256 test :\n");
	
	// 请求内存
	src = malloc(200);
	out = calloc(1, 32);
	sha256 = malloc(sizeof(mbedtls_sha256_context));
	
	// 开始
	mbedtls_sha256_init(sha256);
	mbedtls_sha256_starts(sha256, 0); // \c 0 for SHA-256, or \c 1 for SHA-224
	
	// 输入数据流，长度任意
	memcpy(src, &sinx2_0r5pi_2048_16384[32], 180);
	mbedtls_sha256_update(sha256, src, 180);
	
	// 输入数据流，长度任意
	memcpy(src, &sinx2_0r5pi_2048_16384[100], 180);
	mbedtls_sha256_update(sha256, src, 180);
	
	// 输出结果
	mbedtls_sha256_finish(sha256, out);
	
	mbedtls_sha256_free(sha256); 
	
	// 显示
	dbg_u8_print("out : \n", out, 32, 16);
	
	// mbedtls_sha256 = init + start + update + finish + free
	mbedtls_sha256(src, 180, out, 0);
	dbg_u8_print("out : \n", out, 32, 16);
	
	// 释放内存
	free(src);
	free(out);
	free(sha256);
}

